package cn.edu.dlmu.cogo.framework.context;

import java.util.Set;

/**
 * @author yixi
 */
public interface ApplicationContext {

    /**
     * 是否包含某个Java对象
     * @param beanName Java对象的名称
     * @return 是否包含
     */
    boolean containsBean(String beanName);

    /**
     * 是否包含某个Java对象
     * @param beanClass Java对象的类
     * @return 是否包含
     */
    boolean containsBean(Class<?> beanClass);

    /**
     * 是否包含某个Java对象
     * @param bean Java对象
     * @return 是否包含
     */
    boolean containsBean(Object bean);

    /**
     * 获取所有Java对象的名称
     * @return 名称集合
     */
    Set<String> getNames();

    /**
     * 获取所有Java对象的类
     * @return 类的集合
     */
    Set<Class<?>> getClasses();

    /**
     * 根据类获取Java对象
     * @param beanClass Java对象的类
     * @return Java对象
     */
    Object getBean(Class<?> beanClass);

    /**
     * 根据名称获取Java对象
     * @param beanName Java对象的名称
     * @return Java对象
     */
    Object getBean(String beanName);

    /**
     * 根据Java对象设置Java对象
     * @param bean Java对象
     */
    void setBean(Object bean);

    /**
     * 根据类设置Java对象
     * @param beanClass Java对象的类
     */
    void setBean(Class<?> beanClass);

    /**
     * 根据Java对象和Java对象的名称设置Java对象
     * @param bean Java对象
     * @param beanName Java对象的名称
     */
    void setBean(Object bean, String beanName);

    /**
     * 根据Java对象的类和Java对象的名称设置Java对象
     * @param beanClass Java对象的类
     * @param beanName Java对象的名称
     */
    void setBean(Class<?> beanClass, String beanName);

    /**
     * 根据Java对象的类移除对象
     * @param beanClass Java对象的类
     */
    void removeBean(Class<?> beanClass);
}
